export function getDateRange({ type = "today", convert = false, initDate = new Date() }) {
  // let type=type;
  let dateMin = new Date(initDate);
  let dateMax = new Date(initDate);
  if (type === "today") {
    //
  } else if (type === "month") {
    dateMin.setDate(1);
    dateMax.setMonth(dateMax.getMonth() + 1);
    dateMax.setDate(1);
    dateMax.setTime(dateMax.getTime() - 24 * 3600000);
  } else if (type === "season") {
    if (dateMin.getMonth() >= 0 && dateMin.getMonth() <= 2) {
      dateMin.setMonth(0);
      dateMax.setMonth(2);
      dateMax.setDate(31);
    } else if (dateMin.getMonth() >= 3 && dateMin.getMonth() <= 5) {
      dateMin.setMonth(3);
      dateMax.setMonth(5);
      dateMax.setDate(30);
    } else if (dateMin.getMonth() >= 6 && dateMin.getMonth() <= 8) {
      dateMin.setMonth(6);
      dateMax.setMonth(8);
      dateMax.setDate(30);
    } else {
      dateMin.setMonth(9);
      dateMax.setMonth(11);
      dateMax.setDate(31);
    }
    dateMin.setDate(1);
  } else if (type === "year") {
    dateMin.setDate(1);
    dateMin.setMonth(0);
    dateMax.setDate(31);
    dateMax.setMonth(11);
  } else if (type === "half") {
    if (dateMin.getMonth < 6) {
      dateMin.setDate(1);
      dateMin.setMonth(0);
      dateMax.setDate(30);
      dateMax.setMonth(5);
    } else {
      dateMin.setDate(1);
      dateMin.setMonth(5);
      dateMax.setDate(31);
      dateMax.setMonth(11);
    }
  } else if (type == "30days") {
    dateMin.setTime(dateMin.getTime() - 24 * 3600000 * 30);
  } else if (type == "90days") {
    dateMin.setTime(dateMin.getTime() - 24 * 3600000 * 90);
  } else if (type == "180days") {
    dateMin.setTime(dateMin.getTime() - 24 * 3600000 * 180);
  } else if (type == "365days") {
    dateMin.setTime(dateMin.getTime() - 24 * 3600000 * 365);
  }
  //set m:i:s:ms
  dateMin.setHours(0);
  dateMin.setMinutes(0);
  dateMin.setSeconds(0);
  dateMin.setMilliseconds(0);
  dateMax.setHours(23);
  dateMax.setMinutes(59);
  dateMax.setSeconds(59);
  dateMax.setMilliseconds(999);
  // console.log({ type, dateMin, dateMax });
  if (convert) {
    dateMin = dateMin.getTime();
    dateMax = dateMax.getTime();
    // console.log({ type, dateMin, dateMax });
  }
  return {
    from: dateMin,
    to: dateMax,
    start: dateMin,
    end: dateMax,
    min: dateMin,
    max: dateMax,
  };
}


// get several ranges of date
// from recent to before,
// the 1st day is tomorrow 00:00:00

// config:{
//   type:'',
//   start:'',
//   count:'',
//   list:''
// }

export function getDateRanges(config) {
  // Config for time range.
  let type = config.type;
  let start = config.start;
  let count = config.count;
  let list = config.list;
  let range = [];
  if (!start) start = new Date().getTime();
  // First element of time range.
  let s = new Date(start + 24 * 3600000);
  s.setHours(0);
  s.setMinutes(0);
  s.setSeconds(0); s.setMilliseconds(0);
  // range.push(s.getTime());
  s.setTime(start);
  if (type == "PerMonth") {
    for (let i = 0; i < count; i++) {
      if (i === 0) {
        s.setMonth(s.getMonth() + 1);
        s.setDate(1);
        s.setHours(0);
        s.setMinutes(0);
        s.setSeconds(0);
        s.setMilliseconds(0);
      }
      s.setTime(s.getTime() - 1000);
      let max = s.getTime();
      s.setDate(1);
      s.setHours(0);
      s.setMinutes(0);
      s.setSeconds(0);
      s.setMilliseconds(0);
      let min = s.getTime();
      range.push({ min, max });
      // s.setTime(s.getTime() - 48 * 3600000);
    }
  } else if (type == "PerSeason") {
    for (let i = 0; i < count; i++) {
      let e = new Date(s.getTime());
      if (s.getMonth() >= 0 && s.getMonth() <= 2) {
        s.setMonth(0);
        e.setMonth(3);
      }
      else if (s.getMonth() >= 3 && s.getMonth() <= 5) {
        s.setMonth(3);
        e.setMonth(6);
      }
      else if (s.getMonth() >= 6 && s.getMonth() <= 8) {
        s.setMonth(6);
        e.setMonth(9);
      }
      else {
        s.setMonth(9);
        e.setMonth(12);
      }
      s.setDate(1);
      s.setHours(0);
      s.setMinutes(0);
      s.setSeconds(0);
      s.setMilliseconds(0);
      e.setDate(1);
      e.setHours(0);
      e.setMinutes(0);
      e.setSeconds(0);
      e.setMilliseconds(0);
      e.setTime(e.getTime() - 1000);
      let max = e.getTime();
      let min = s.getTime();
      range.push({ min, max });
      s.setTime(s.getTime() - 48 * 3600000);
    }
  } else if (type == "PerHalf") {
    for (let i = 0; i < count; i++) {
      let e = new Date(s.getTime());
      if (s.getMonth() >= 0 && s.getMonth() <= 5) {
        s.setMonth(0);
        e.setMonth(5);
        e.setDate(30);
      }
      else {
        s.setMonth(6);
        e.setMonth(11);
        e.setDate(31);
      }
      s.setDate(1);
      s.setHours(0);
      s.setMinutes(0);
      s.setSeconds(0);
      s.setMilliseconds(0);
      e.setHours(23);
      e.setMinutes(59);
      e.setSeconds(59);
      e.setMilliseconds(0);
      range.push({ min: s.getTime(), max: e.getTime() });
      s.setTime(s.getTime() - 48 * 3600000);
    }
  } else if (type == "PerYear") {
    for (let i = 0; i < count; i++) {
      let e = new Date(s.getTime());
      s.setMonth(0);
      s.setDate(1);
      s.setHours(0);
      s.setMinutes(0);
      s.setSeconds(0);
      s.setMilliseconds(0);
      e.setMonth(11);
      e.setDate(31);
      e.setHours(23);
      e.setMinutes(59);
      e.setSeconds(59);
      e.setMilliseconds(0);
      range.push({ min: s.getTime(), max: e.getTime() });
      s.setTime(s.getTime() - 48 * 3600000);
    }
  } else if (type == "Per30Days") {
    for (let i = 0; i < count; i++) {
      let max = s.getTime();
      if (i > 0) {
        max = max - 1000;
      }
      s.setTime(s.getTime() - 24 * 3600000 * 30);
      let min = s.getTime();
      range.push({ min, max });
    }
  } else if (type == "Per90Days") {
    for (let i = 0; i < count; i++) {
      let max = s.getTime();
      if (i > 0) {
        max = max - 1000;
      }
      s.setTime(s.getTime() - 24 * 3600000 * 90);
      let min = s.getTime();
      range.push({ min, max });
    }
  } else if (type == "Per180Days") {
    for (let i = 0; i < count; i++) {
      let max = s.getTime();
      if (i > 0) {
        max = max - 1000;
      }
      s.setTime(s.getTime() - 24 * 3600000 * 180);
      let min = s.getTime();
      range.push({ min, max });
    }
  } else if (type == "Per365Days") {
    for (let i = 0; i < count; i++) {
      let max = s.getTime();
      if (i > 0) {
        // max = max - 1000;
      }
      s.setTime(s.getTime() - 24 * 3600000 * 365);
      let min = s.getTime();
      range.push({ min, max });
    }
  } else if (type == "CustomList") {
    range = [];
    let d0 = null;
    list = list.split(" ");
    for (let i = 0; i < list.length; i++) {
      let str =
        list[i].substr(0, 4) +
        "/" +
        list[i].substr(4, 2) +
        "/" +
        list[i].substr(6, 2) +
        " 00:00:00";
      let d1 = new Date(str).getTime();
      if (d0) {
        if (i === 1) range.push({ min: d1, max: d0 });
        else range.push({ min: d1, max: d0 - 1000 });
      }
      d0 = d1;
    }
    // console.log(type);
  }
  range.reverse();
  // console.log(range);
  // for (let i = 0; i < range.length; i++) {
  //   console.log(new Date(range[i].min).toLocaleString()+" ~ "+new Date(range[i].max).toLocaleString());
  // }
  return range;
}